import java.util.ArrayList;
import java.util.List;
/*
找到字符串中所有字母异位词
经典的滑动窗口问题，这个要用到了哈希的思想
入窗口
判断->出窗口
更新结果
 */
class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        List<Integer> list=new ArrayList<>();

        int[] hash1=new int[26];
        int[] hash2=new int[26];

        for (int i = 0; i < p.length(); i++) {
            char ch=p.charAt(i);
            hash1[ch-'a']++;
        }

        int left=0,right=-0;
        while(right<s.length()){
            //入窗口
            char ch=s.charAt(right);
            hash2[ch-'a']++;
            //判断
            if(right-left==p.length()){
                //出窗口
                char chd=s.charAt(left);
                hash2[chd-'a']--;
                left++;
            }
            //更新答案
            if(isSame(hash1,hash2)){
                list.add(left);
            }
            right++;
        }

        return list;
    }

    private boolean isSame(int[] hash1, int[] hash2) {
        for (int i = 0; i < 26; i++) {
            if(hash1[i]!=hash2[i]){
                return false;
            }
        }
        return true;
    }
}